package com.webserver.core;

import com.webserver.http.MyHttpRequest;
import com.webserver.http.MyHttpResponse;

import java.io.File;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * 作者：JustOne
 * 微信：Andylau2020smile
 * 抖音：JustOne2018
 * 日期：2022/6/17 13:57
 */
public class DispatcherServlet {

    private static File rootDir;  //定位resoources目录
    public static File staticDir; //定位static目录，临时改为公开的，以后改调整

    static {
        try {
            //获取resources这个目录的定位
            URI rootDirURI = DispatcherServlet.class.getClassLoader().getResource(".").toURI();
            rootDir = new File(rootDirURI);//--------------定位resources这个目录
            staticDir = new File(rootDir ,"static");//定位static这个目录
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

    }

    public void service(MyHttpRequest request, MyHttpResponse response){
        //String myUri = myRequest.getUri();//原来是这样的，只有页面可选，现在有功能可选
        String youUri = request.getRequestURI();//看看用户要什么
        System.out.println("===用户的youUri:"+ youUri);
        //  http://localhost:8088/myweb/index.html
        //  path:/myweb/index.html

        HandlerMapping.MethodMapping methodMapping = HandlerMapping.getMethod(youUri);
        if(  methodMapping != null ){
            Object object = methodMapping.getController();
            Method method = methodMapping.getMethod();
            try {
                method.invoke(object,request,response);
            } catch (Exception e) {
                e.printStackTrace();
                //当调用某个网络应用中的处理业务方法时，该方法若抛出异常，这里应当响应500错误给浏览器
                //参照下方404的方式，设置即可
                response.setStatusCode(500);
                response.setStatusReason("Serveic Error");//这句是景景随便写的
            }
            return;
        }


        File file = new File(staticDir, youUri);//----------定位页面，即resources/static/myweb/index.html
        System.out.println("+++用户要的文件："+file);
        if(file.exists()){
            System.err.println(">>>找到了你想要的东西，开心1");
        }else{
            System.err.println(">>>没找到你想要的东西，桑心1");
            response.setStatusCode(404);
            response.setStatusReason("NotFound");
            file = new File(staticDir,"/root/404.html");
        }
        response.setFile(file);//-把用户的要资源给到响应对象


    }
}














